//---------------------------------------------------------------------------
//----------------Algoritmos de Manipulacao de Matrizes----------------------
//---------------------------------------------------------------------------
//-----------------Corpo das Funcoes em Matrizes.cpp-------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
float **CriaMatriz(int NumeroLinhas,int NumeroColunas);
float **ApagaMatriz(float **A, int NumeroLinhas, int NumeroColunas);

float  *CriaVetor(int NumeroElementos);
float  *ApagaVetor(float *A);

float **MultiplicaMatriz(float **A,int LinhasA,int ColunasA,float **B,int LinhasB,int ColunasB);
float **MultiplicaVetorDiagonal(float **A,int LinhasA,int ColunasA,float *B,int ElementosB);
float  *MultiplicaVetor(float **A,int LinhasA,int ColunasA,float *B);
float **MultiplicaConstante(float **A,int LinhasA,int ColunasA,float B);
float  *MultiplicaConstante(float  *A,int ElementosA,float B);

float **SomaMatriz(float **A,int LinhasA,int ColunasA,float **B);
float **SubtraiMatriz(float **A,int LinhasA,int ColunasA,float **B);

float   CalculaSomaElementos(float **Matriz,int NumLinhas,int NumColunas);
float   CalculaSomaElementos(float *Vetor,int NumElementos);
float   CalculaMediaElementos(float **Matriz,int NumLinhas,int NumColunas);
float   CalculaMediaElementos(float *Vetor,int NumElementos);
float   CalculaMaximoElemento(float **Matriz,int NumLinhas,int NumColunas);
float   CalculaMaximoElemento(float *Vetor,int NumElementos);
float   CalculaMinimoElemento(float **Matriz,int NumLinhas,int NumColunas);
float   CalculaMinimoElemento(float *Vetor,int NumElementos);
float   CalculaVarianciaElementos(float **Matriz,int NumLinhas,int NumColunas);
/***/float   CalculaVarianciaElementos(float *Vetor,int NumElementos);

float **CalculaAdjunta(float **A,int NumLinhas);
float **CalculaCofatores(float **Matriz,int NumLinhas);
float **CalculaTransposta(float **A,int LinhasA,int ColunasA);
float   CalculaDeterminante(float **Matriz,int NumLinhas);


float **CalculaInversa   (float **Matriz,int NumLinhas);
float **CalculaInversaLU (float **Matriz,int NumLinhas);
float **CalculaInversaSVD(float **Matriz,int NumLinhas);



float **RemoveColuna(float **Matriz,int NumLinhas, int NumColunas,int ColunaRemovida);
float **RemoveLinha(float **Matriz,int NumLinhas, int NumColunas,int LinhaRemovida);

int     FatoracaoLU(float **A,int LinhasMatriz,float **Permutacao);
void    EliminacaoGaussJordan(float **A,float **B,int LinhasMatriz,int ColunasMatriz);
int     DecomposicaoSVD(float **a, int m, int n, float *w, float **v);

float  *SolucaoSistemaSVD(float **A,int NumLinhasA,int NumColunasA,float *B);
float  *SolucaoSistemaGAUSS(float **A,int NumLinhasA,int NumColunasA,float *B);
/***/float  *SolucaoSistemaLU(float **MatrizFatoradaLU,int NumLinhas,float **Permutacao,float *Vetor);

float  *CalculaAngulosEulerMatrizRotacao(float **Rw);
//---------------------------------------------------------------------------
